#pragma once
#include "Group.h"
#include "State.h"
#include <cmath>
#include <vector>
#include "State.h"
#include <time.h>

using namespace std;

class IAStrategy
{
public:
	IAStrategy(void);
	~IAStrategy(void);
	vector<State*> generatePossibleActions(State* state);
	virtual Action* calculateNextAction(State *state)=0;
};

class IAStrategyMinMax: public IAStrategy
{
public:
	IAStrategyMinMax(void);
	~IAStrategyMinMax(void);
	Action* calculateNextAction(State* state);
	double heuristic(Map *map);
	double minMaxAlgo(State* state, int prof, int maxProf,const clock_t &beginning);
};

class IAStrategyAlphaBeta: public IAStrategy
{
public:
	IAStrategyAlphaBeta(void);
	~IAStrategyAlphaBeta(void);
	Action* calculateNextAction(State* state);
	double heuristic(Map *map);
	double minMaxAlgo(State* state, int prof, int maxProf,double alpha,double beta,const clock_t &beginning);
};

class IAStrategyHuman: public IAStrategy
{
public:
	IAStrategyHuman(void);
	~IAStrategyHuman(void);
	Action* calculateNextAction(State* state);
};

